var template = Handlebars.compile(livraisonAppTemplate);
var devList = [];
var livraisonId;
var isAdminBool = false;

var etatLibelle = {
	"TERMINE" : 'Termin\u00E9',
	"EN_COURS" : 'En cours',
	"PAS_COMMENCE" : 'Pas commenc\u00E9'
}

var loadLivraisonApp = function(div, livraisonApp) {
	livraisonApp.etatLibelle = etatLibelle[livraisonApp.etat];
	livraisonApp.isAdmin = isAdminBool;
	livraisonApp.isWebapp = livraisonApp.application.type == "WEBAPP";
	livraisonApp.onPeutChanger = livraisonApp.etat != "TERMINE";
	var html = $(template(livraisonApp));
	html.find('#terminer').click({'livraisonApp' : livraisonApp}, function(event) {
		event.data.livraisonApp.etat = 'TERMINE';
		$.post('livraisonApplication', {'json' : JSON.stringify(event.data.livraisonApp)}, function(data) {
			sendMessage(livraisonId, event.data.livraisonApp.application.name + " "+event.data.livraisonApp.application.version + " termin\u00E9");
			loadLivraisonApp(div, data.dto);
		});
	})
	html.find(".devList").change({'livraisonApp' : livraisonApp}, function(event) {
		var selected = $(this).find('option:selected');
		event.data.livraisonApp.developpeur = {
			'trigram' : selected.val(),
			'name' : selected.text()
		};
		event.data.livraisonApp.etat = 'EN_COURS';
		loadLivraisonApp(div, event.data.livraisonApp)
		$.post('livraisonApplication', {'json' : JSON.stringify(event.data.livraisonApp)}, function(data) {
			loadLivraisonApp(div, data.dto);
			sendMessage(livraisonId, event.data.livraisonApp.application.name + " "+event.data.livraisonApp.application.version +" assign\u00E9 \u00E0 " + event.data.livraisonApp.developpeur.name);
		});
	}).each(function() {
		fillDevList($(this));
	})
	html.find("input:checkbox").data('id', livraisonApp.id).click(function() {
		if ($(".select input:checkbox").is(':checked')) {
			$('.suppression').show();
		} else {
			$('.suppression').hide();
		}
	})
	if (livraisonApp.developpeur) {
		html.find(".devList option[value=" + livraisonApp.developpeur.trigram + "]").attr("selected", "selected");
	}
	div.html(html);
}

var deleteLivraisonApp = function() {
	var livraisonAppId = [];
	$('.select input:checkbox:checked').each(function(index) {
		livraisonAppId.push($(this).data('id'));
	});

	$.ajax({
		type : 'DELETE',
		url : 'livraisonApplication?idList=' + JSON.stringify(livraisonAppId),
		success : function() {
			refresh();
		}
	});
}

var loadLivraison = function(livraison) {
	if (livraisonId != livraison.identifiant) {
		livraisonId = livraison.identifiant;
		channelConnect(livraisonId);
	}
	$("input#name").val(livraison.name);
	$(".livraisonApp").remove();
	$(".delimiteur").remove();
	$("#livraisonTable").hide();
	var previousPriorite = 0;
	$.each(livraison.livraisonAppList, function(key, livraisonApp) {
		var div = $("<tr/>").addClass("livraisonApp");
		loadLivraisonApp(div, livraisonApp)
		if ((previousPriorite != 0)
				&& (previousPriorite != livraisonApp.application.priorite)) {
			$('.footer').before($(delimiterTemplate));
		}
		previousPriorite = livraisonApp.application.priorite;
		$('.footer').before(div);
	})
	$("#livraisonTable").show();
	$('form#pomPortail').attr("action", "pomPortail?id=" + livraisonId);
	initApplicationList();
}

var fillDevList = function(div) {
	$.each(devList, function(key, dev) {
		div.append($("<option/>").attr("value", dev.trigram).text(dev.name));
	})
}

var analyseAncre = function(ancre) {
	$.getJSON('livraison?id=' + ancre, function(livraison) {
		loadLivraison(livraison);
	});
}

var termineLivraison = function() {
	var livraison = {
		'identifiant' : livraisonId,
		'name' : $("input#name").val(),
		'termine' : true
	};
	$.post('livraison', {
		'json' : JSON.stringify(livraison)
	}, function(data) {
		if (data.ok) {
			window.location.href = "livraisonList.html";
		} else {
			erreur(data.error);
		}
	});
}

var applicationNameChangeListener = function() {
	$("#name").blur(function() {
		var livraison = {
			'identifiant' : livraisonId,
			'name' : $(this).val()
		}
		$.post('livraison', {
			'json' : JSON.stringify(livraison)
		}, function(data) {
			if (!data.ok) {
				erreur(data.error);
			}
		});
	});
}

var ajouterApplicationAppListener = function() {
	$("#ajouter").click(function() {
		var applicationName = $('#applicationList').val();
		var version = $("#newApplicationVersion").val();
		var livraisonApplication = {
			'id' : livraisonId + applicationName + version
		};
		var application = {
			'name' : applicationName,
			'version' : version
		};
		livraisonApplication.application = application;
		livraisonApplication.etat = "PAS_COMMENCE";
		var livraison = {
			'name' : $("input#name").val(),
			'identifiant' : livraisonId,
			'livraisonAppList' : [ livraisonApplication ]
		}
		$.post('livraison', {
			'json' : JSON.stringify(livraison)
		}, function(data) {
			if (data.ok) {
				refresh();
			} else {
				erreur(data.error);
			}
		});
	});
}

var refresh = function() {
	analyseAncre(location.hash.slice(1));
}

var initApplicationList = function() {
	var applicationList = []; 
	$.getJSON('application', function(data) {
		$.each(data, function(key, application) {
			applicationList.push(application.name);
		});
		$("#applicationList").autocomplete(applicationList);
	});
	
}

var initTaille = function() {
	var height = $('body').height() - $('div#avantContent').height();
	$('div.content').height(height);
}

$(function() {
	initHeader(function() {
		initTaille();
	});
	channelCallback.onMessage.push(function(message) {
		erreur(message.message)
		refresh();
	});
	$('.poubelle').click(function() {
		deleteLivraisonApp();
	});
	$('#livraisonTermine').click(function() {
		termineLivraison();
	});
	$(".content").scroll(function(){
		$("#applicationList").autocompleteHide();
	});
	isAdmin(function() {
		$('.idAdmin').show();
		isAdminBool = true;
	}, function() {
		$('.idAdmin').remove();
	});
	$.getJSON('dev/list', function(data) {
		devList = data;
		analyseAncre(location.hash.slice(1));
	});
	applicationNameChangeListener();
	ajouterApplicationAppListener();
	$(window).bind('hashchange', function() {
		analyseAncre(location.hash.slice(1));
	});
});